# Extensible Batch file Builder - Расширяемый построитель командных файлов
Программа для сборки командного файла по указанному сценарию.\
Изначально создавалась для упрощения построения меню в командном режиме. В последствии "обросла" макросами, вложенными вызовами, произвольными кодировками (локализацией) и возможностью расширения функционала.\
Для платформы Windows7+.

Особенности работы в Windows7:\
&emsp;-Имеется ограничение на использование "неродных" кодировок.\
&emsp;-Используется сторонее решение для поддержки управляющих последовательностей ANSI.

## Запуск
**>EBB.cmd**&emsp;*Сценарий[.ebb]&emsp;[КомандныйФайл[.cmd]]&emsp;[/EBB_Run]&emsp;[/EBB_Debug]*\
+ *Сценарий* -Имя файла сценария по умолчанию имеет расширение .ebb
+ *КомандныйФайл* -Имя создаваемого командного файла. Необязательный параметр, если он не указан то будет подставлено имя файла сценария с расширением .cmd
+ */EBB_Run* -Ключ для запуск командного файла после успешной сборки
+ */EBB_Debug* -Ключ для записи отладочной информации в файл "КомандныйФайл.cmd.log"

## Файл сценария
Представляет собой текст на языке командного процессора (cmd.exe) с использованием управляющих конструкций.\
Управляющая конструкция оформляется как отдельная строка с двумя символами двоеточия вначале (командный процессор интерпретирует её как недопустимую метку) и названием пространства имён за которым через разделитель "<" перечислено название конструкции и её параметры если есть.\
Пространство имён это папка расположенная в каталоге с файлом EBB.cmd. Папка содержит командные файлы, названия которых используются в качестве названия управляющих конструкций.\
Запуск файла EBB.cmd без параметров отобразит список всех доступных управляющих конструкций (всех пространств имён) с описанием.

Список управляющих конструкций пространства имён EBB:
+ *BlkAdd, BlkMid, BlkEnd* -Косметика для Notepad++.
+ *Build* -Сборка командного файла по сценарию из внешнего файла.
+ *CodePage* -Настройка кодовой страницы файлов сценария.
+ *Command1* -Выполнение произвольного кода на этапе подготовки вложенных файлов.
+ *Command2* -Выполнение произвольного кода на этапе сборки командного файла.
+ *EnableEE* -Включение режима расширенной обработки команд и отложенной обработки переменных среды (обязательно для конструкций меню).
+ *Function* -Безусловное добавление кода функции в результирующий файл. Используется, когда отсутствует строка с явным переходом или вызовом этой функции.
+ *FunctionAdd* -Объявление новой функции. В результирующий файл будут включены только функции вызов которых (или переход) встречается в коде явно.
+ *FunctionEnd* -Завершает конструкцию FunctionAdd командой "Exit /B [ExitCode]".
+ *Include* -Подключение сценария из другого файла. Код сценария из указанного файла будет подставлен взамен управляющей конструкции.
+ *Macro* -Подстановка кода макроса.
+ *MacroAdd* -Создание нового макроса.
+ *MacroEnd* -Завершает конструкцию MacroAdd.
+ *MenuAdd* -Создание нового меню.
+ *MenuCall* -Вызов пункта меню.
+ *MenuEnd* -Завершает конструкцию MenuAdd. Автоматически создаются функции
Me*nuNameItemList и MenuNameLabelGet.
+ *MenuItemAdd* -Добавление нового пункта в меню (как функцию).
+ *MenuItemList* -Отображение пунктов меню в виде списка "команда - описание".
+ *MenuLabelGet* -Поиск названия метки функции соответствующей пункту меню введённой команды.
+ *SkipCond* -Условная компиляция.

## Установка
Программа готова к использованию, достаточно получить копию проекта и развернуть в отдельную папку.\
Комментарии и рекомендации:
+ Удаление папок Examples, Macros_Test, NamespaceTest не повлияет на функционал.
+ Для ускорения процесса сборки переопределить переменную TEMP (например в файле EBB.cmd) на диск расположенный в оперативной памяти (см. проект <http://www.ltr-data.se/opencode.html/#ImDisk>).
+ Для использования в проводнике контекстного меню файлов .ebb запустить файл "\Setup\EBB registry.cmd". Будут добавлены два пункта:
    + "Сборка и запуск файла cmd"
    + "Сборка с отладкой и запуск файла cmd".
+ Для настройки редактора Notepad++ запустить файл "\Setup\EBB Notepad++.cmd".\
Будет добавлено выделение ситаксиса и панель "список функций".
    <img src="Setup/EBB%20Notepad++.png" title="Notepad++ синтаксис и список функций">

## Примеры использования
Находятся в папке "\Examples".\
Файл "\Examples\Build & Run.cmd" для автоматической сборки и запуска примеров.

## Структура папок
+ ansi189-bin -Используется для платформы Windows7.
	В консоли платформы Windows7 отсутствует возможность использования управляющих кодовых последовательностей терминала ANSI. В папке находится проект <https://github.com/adoxa/ansicon/releases> для эмуляции управляющих последовательностей ANSI.
+ EBB -Пространство имён с базовыми управляющими конструкциями.
+ Examples -Примеры сценариев.
+ Macros -Папка с базовыми макросами.
+ Macros_Test -Папка с макросами для примеров из Examples.
+ NamespaceTest -Пространство имён с одной управляющей конструкцией. Для примера.
+ Setup -Содержит командные файлы для настроек контекстного меню и Notepad++.

## Лицензия
ГОСУДАРСТВЕННАЯ ОТКРЫТАЯ ЛИЦЕНЗИЯ, ВЕРСИЯ 1.1
https://g.info.gov.ru/datamart/nsud-datamarts/-/blob/master/open_license_ru

## История выпусков
**2024-03-29 2.1**\
Добавлена управляющая конструкция SkipCond.

**2024-03-23 2.0**\
Добавлены управляющие конструкции:
+ BlkAdd, BlkMid, BlkEnd  -"Косметика" для Notepad++
+ Buld, Function, FunctionAdd, FunctionEnd

Добавлены переменные для использования внутри конструкции MenuItemAdd:
+ EBB_MICmd -Текст команды
+ EBB_MILabel -Название метки функции
+ EBB_MIText -Текст описания пункта меню

**2023-10-19 1.0**\
Первый минимальный.
